package com.my.main.base.impnexp;

import com.my.main.base.exception.MyException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


/**
 * 读取写入Excel都需要用的方法以及属性
 * @author my
 *
 */
public class ExcelUtil {
	public static final String TIMEFORMAT = "yyyy/M/d";	// excel导入导出显示的时间格式
	
	public Log logger = LogFactory.getLog(getClass());
	
	/**
	 * 获取该对象的所有属性及其对应的表头名称
	 * @param clazz
	 * @return
	 */
	public List<ExcelCell> getCellTitle(Class clazz) {
		
		List<ExcelCell> titleList = new ArrayList<ExcelCell>();
		
		try {
			// 得到类中的所有属性集合
			Field[] fileArray = clazz.getDeclaredFields();
			for (int i=0; i<fileArray.length; i++) {
				Field field = fileArray[i];
				field.setAccessible(true); 							// 设置此属性是可以访问的
				PoExcelAnnotation ann = field.getAnnotation(PoExcelAnnotation.class);
				if (ann != null) {
					// 得到注解的值
					String title = field.getName();
					if (ann.title() != null) {
						title = ann.title();
					}
					
					ExcelCell cell = new ExcelCell(field.getName(), title);
					titleList.add(cell);
				}
			}
		} 
		catch (IllegalArgumentException e) {
			logger.error(e);
			throw new MyException("读取表头时出现参数异常");
		}
		catch (Exception e) {
			logger.error(e);
			throw new MyException("读取表头时出现异常");
		}
		
		return titleList;
        
    }
	
	
	/**
	 * 获取类的所有属性类型与属性名的kv集合
	 * @param className			类名
	 * @throws ClassNotFoundException 
	 * @author my
	 * @return 所有属性的类型与属性名的kv集合
	 */
	public  Map<String, Class>getFieldClass(String className) throws ClassNotFoundException {
		Map<String, Class>list = new HashMap<String, Class>();
			
		   Class clazz =	Class.forName(className);
	       // 获取实体类的所有属性信息，返回属性数组  
	       Field[] fields = clazz.getDeclaredFields();  
	       for (Field field : fields) {  
	    	  Class name = field.getType();		//获取属性类型
	    	  list.put(field.getName(), name);
	       }
	       return list;
	 }
}
